package br.edu.ufabc.gtrnp.helppo.business;

import org.hibernate.Query;
import org.hibernate.Session;

import br.edu.ufabc.gtrnp.helppo.business.exception.NenhumEspacoDisponivelException;
import br.edu.ufabc.gtrnp.helppo.persistence.entity.EspacoUtilizado;

public class EspacoDisponivelBusiness {
	public static EspacoDisponivelBusiness business = new EspacoDisponivelBusiness();
	
	private EspacoDisponivelBusiness(){
	}
	
	public static EspacoDisponivelBusiness getInstance(){
		return business;
	}
	
	public EspacoUtilizado proximo() throws NenhumEspacoDisponivelException{
		
		GenericDAO dao = new GenericDAO();
		Session session = dao.getCurrentSession();
		
		String hql = "select max(id) from EspacoUtilizado";
		Query query = session.createQuery(hql);
		
		Integer id = (Integer)query.uniqueResult();
		EspacoUtilizado proximo = new EspacoUtilizado();
		if (id == null){
			proximo.setListen_port(9100);
			proximo.setRegion_x(9500);
			proximo.setRegion_y(9495);
		}else{
			
			EspacoUtilizado ultimo = (EspacoUtilizado)session.get(EspacoUtilizado.class, id);
			proximo.setListen_port(ultimo.getListen_port()+1);
			
			int region_x = ultimo.getRegion_x(); 
			int region_y = ultimo.getRegion_y();
			if (region_x >= 9520){
				region_x = 9500;
				region_y++;
			}
			else{
				region_x++;
			}
			proximo.setRegion_x(region_x);
			proximo.setRegion_y(region_y);
		}
		session.persist(proximo);
		
		if (proximo == null)
			throw new NenhumEspacoDisponivelException();
		else
			return proximo;
	}
}
